Enviando e-mails com PL/SQL em Bancos de Dados Oracle - Parte 2

Por Fabio Prado ,
Publicado en Outubro 2013

Dando continuidade ao artigo Enviando e-mails com PL/SQL em Bancos de Dados Oracle, irei compartilhar nesta 2a. parte, uma package chamada PKG_ENVIA_EMAIL, que eu desenvolvi para facilitar o trabalho de envio de e-mails com ou sem anexo. Essa package internamente utiliza a package UTL_MAIL para enviar mensagens sem anexo e a package UTL_SMTP para enviar mensagens com anexo do tipo texto. Ela foi criada como o objetivo didático de demonstrar o uso das 2 packages de envio de e-mail e pode ser utilizada para padronizar e facilitar o envio de e-mails com anexos maiores que 32K através do uso da package UTL_SMTP, pois não é muito fácil utilizá-la para essa finalidade (para mais informações sobre este assunto, leia a 1a. parte do artigo).

A package PKG_ENVIA_EMAIL pode ser instalada e utilizada em qualquer schema de usuário de um SGBD Oracle, desde que sejam atendidos os pré-requisitos especificados na 1a. parte deste artigo. Ela contém 1 função e 2 stored procedures, conforme descrições abaixo:

- FC_GERAR_ARRAY_STRING:

Função privada que permite gerar array para separar destinatários e enviar o e-mail para múltiplos destinatários, quando necessário.

- SP_ENVIAR_EMAIL:

Stored Procedure pública que pode ser utilizada para enviar e-mails sem anexo. Utiliza internamente a package UTL_MAIL.

- SP_ENVIAR_EMAIL_COM_ANEXO:

Stored Procedure pública que pode ser utilizada para enviar e-mails COM anexo do tipo texto. Utiliza internamente a package UTL_SMTP e permite enviar somente 1 anexo por e-mail.

É importante ressaltar que as procedures dessa package só podem ser utilizadas para enviar 2 tipos de e-mail: sem anexo ou com 1 anexo do tipo texto. Se você precisar mandar mais de 1 anexo do tipo texto ou outros tipos de anexos, tais como arquivos de vídeo ou som, consulte a documentação oficial da Oracle para criar nova(s) procedure(s) com sobrecarga dentro da package PKG_ENVIA_EMAIL, incluindo o código necessário para executar essas tarefas.

Para enviar um e-mail sem anexo, execute a stored procedure SP_ENVIAR_EMAIL, como no exemplo abaixo, substituindo os valores para os parâmetros:


  
BEGIN   
	PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL (P_ASSUNTO => 'Assunto do e-mail',    
   	P_MSG => 'Mensagem',    
	P_EMAIL_ORIGEM => 'oracle@oracle.com',  
  	P_EMAIL_DESTINO => 'fbifabio@gmail.com,
	jack@oracle.com', 
	P_EMAIL_CC_DESTINO => 'ze@oracle.com,   
	jo@oracle.com',  P_EMAIL_CCO_DESTINO => null);  
	END; 
 
 

Para enviar um e-mail com 1 anexo do tipo texto, execute a stored procedure SP_ENVIAR_EMAIL_COM_ANEXO, como no exemplo abaixo:


  
DECLARE    
   v_CLOB CLOB;  
   BEGIN   
   PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL_COM_ANEXO (P_ASSUNTO => 'Assunto do e-mail',    
   P_MSG => 'Mensagem',          
   P_EMAIL_ORIGEM => 'oracle@oracle.com',
   P_EMAIL_DESTINO => 'fbifabio@gmail.com, 
   jack@oracle.com',    
   P_EMAIL_CC_DESTINO => 'ze@oracle.com, 
   jo@oracle.com',  
   P_EMAIL_CCO_DESTINO => null, 
   P_FILENAME => 'arquivo.txt',    
   P_ANEXO => v_CLOB,  -- variável CLOB c/ texto do arquivo 
   P_ATTACH_MIME => 'text/plain; charset=iso-8859-1',  
   P_SMTP_SERVER => 'smtp.oracle.com.br',  
   P_SMTP_PORT => 25);  
   END; 
 
 

Postado por Fabio Prado.